#include "../common/Random.h"
#include "../logger/logger.h"
#include "../application/AdpAPI.h"
#include "../middleware/CommunicationADP.h"

int main(int argc, char** argv){
	CLogger::create("Almacen De Piezas");
	CLogger::setLevel(LogLevelEnum::TRACE);
	CLogger::log("Empieza a simular.", LogLevelEnum::INFO);

	AdpAPI adpAPI;
	while(true){
		CLogger::log("Esperando orden de compra", LogLevelEnum::INFO);

		ProductoCantidad pc = adpAPI.obtenerProductoAProducir();
		if (adpAPI.sePuedeEnviarAProducir()) {
			CLogger::log(
				"Envio a producir " + StringUtils::itos(pc.cantidad) +
				" productos de tipo " + StringUtils::itos(pc.tipo),
				LogLevelEnum::INFO
			);
			PedidoPiezas piezas;
			for(int i=0;i<MAX_PIEZAS;i++){
				piezas.piezas[i]=0;
			}
			ProductoPiezasMap map = MapaPiezasProducto::obtenerPiezasYCantidad(pc.tipo);
			ProductoPiezasMap::iterator it;
			int i=0;
			for (it = map.begin(); it != map.end(); it++) {
				std::cout << "Pieza " << it->first<< std::endl;
				piezas.piezas[i] = it->first;
				i++;
			}
					
			adpAPI.pedirCanastos(piezas);
			adpAPI.enviarAProducir(pc.tipo, pc.cantidad);
		
		}
	}

	return 0;
}

